#!/usr/bin/env node

// 这是一个用于生成作业提交目录结构的脚手架

const path = require('path')
const inquirer = require('inquirer')
const { readdir, writeFileSync, mkdirSync } = require('fs')
const ejs = require('ejs')

const handler = answers => {    
    const tmplDir = path.join(__dirname, 'templates')
    const destDir = path.join(process.cwd(), `fed-e-task-${answers.part.index}-${answers.module.index}`)
  
    mkdirSync(destDir)
    mkdirSync(path.join(destDir, 'code'))
    mkdirSync(path.join(destDir, 'notes'))
  
    readdir(tmplDir, (err, files) => {
        if (err) throw err
        files.forEach(file => {
            ejs.renderFile(path.join(tmplDir, file), answers, (err, result) => {
                if (err) throw err
                writeFileSync(path.join(destDir, file), result)
            })
        })
    })
    
}

const choices = [
    {
        name: 'Part 1 · JavaScript 深度剖析', 
        value: { 
            index: '01', 
            display: 'Part 1 · JavaScript 深度剖析',
            choices: [
                { name: '模块一 函数式编程与 JS 异步编程、手写 Promise', value: { index: '01', display: '模块一 函数式编程与 JS 异步编程、手写 Promise'} },
                { name: '模块二ES 新特性与 TypeScript、JS 性能优化', value: { index: '02', display: '模块二ES 新特性与 TypeScript、JS 性能优化'} },
            ]
        }
    },
    {
        name: 'Part 2 · 前端工程化实战',
        value: { 
            index: '02', 
            display: 'Part 2 · 前端工程化实战',
            choices: [
                { name: '模块一 开发脚手架及封装自动化构建工作流', value: { index: '01', display: '模块一 开发脚手架及封装自动化构建工作流'} },
                { name: '模块二 模块化开发与规范化标准', value: { index: '02', display: '模块二 模块化开发与规范化标准'} },
            ]
        }
    },
]

console.log('create homework folder')
inquirer.prompt([
    {
        type: 'list',
        name: 'part',
        message: 'choose part',
        choices,
    }
]).then(answers => {
    inquirer.prompt([
        {
            type: 'list',
            name: 'module',
            message: 'choose module',
            choices: answers.part.choices,
        }
    ]).then(answers2 => {
        handler({...answers, ...answers2})
    })        
})